﻿using System;
using System.Linq;
using System.Collections.Generic;
using System.Text;

namespace RobotCtrl
{

    //DigitalHWout wird mit dem Roboter LED verknüpft
    // get/set von Property/Indexer können einzeln überschribe werden
    public class DigitalOut_HW : DigitalOut
    {
        private int portAddress;

        public override int Data
        {
            /*Nur getter oder setter überschreibbar, es müssen nicht beide sei,
             * auch wenn override --> get { return this.data; } kann weggeleassen werden*/
            set
            {
                //Save for local use
                this.data = value;
                //Write down to port
                IOPort.Write(this.portAddress, this.data);
            }
        }

        public DigitalOut_HW(int portAddr)
        {
            this.portAddress = portAddr;
        }

        public override bool this[int idx]
        {
            /*get { //True if bit is set, false otherwise return ((data & (0x01 << idx)) != 0);}*/

            //Konditionalparam kommt vor Zuweisung!!!! (theoretisch auch ohne klammern möglich)
            set
            {
                //Value 1 --> dann setzen mittels Oder
                //Value 0 --> Inhalt von diesem Bit auf ganzes gesehen negieren 
                //            und dieses Bitmuster mit data UND Verknüpfen
                Data = (value ? data | (0x01 << idx) : data & ~(0x01 << idx));
            }
        }

    }
}
